#ifndef MEMORY_H
#define MEMORY_H
#include "measure.h"

#include <QString>
#include <QMultiMap>
#include <QPair>

class Memory : Measure
{
public:
    Memory();
    ~Memory(){}

    struct MemoryFile{
        QString memTotal;    //总的物理内存大小
        QString memFree;     //可用物理内存大小
        QString memUsedRate; //内存使用率
        QString buffers;     //缓冲区大小
        QString cached;      //用于高速缓存的大小
        QString swapCached;  //用于高速缓存的交换分区大小
        QString active;      //活动内存量
        QString inActive;    //不活动内存量
        QString swapTotal;   //交换分区量
        QString swapFree;    //可用交换分区大小
        QString swapUsedRate;    //交换分区使用率
        QString dirty;       //脏内存，可能要写到磁盘或者交换分区的内存
        QString slab;        //内核使用的内存量
    }sMemoryFile;

    struct MemorySwap{
        QString swapIn;         //从vmstat获得
        QString swapOut;        //从vmstat获得
    }sMemorySwap;

    void GetMemoryInfo(Memory *pMemory, QMultiMap<QString, QPair<QString,QString> > *pmultiMap);

private:
    void GetMemoryFromFile(struct MemoryFile *pFile);
    void GetMemoryFromCommand(struct MemorySwap *pSwap);
    // 从字符串中分解得到结果
    void GetSwap(char *pResult, struct MemorySwap *pSwap);
    char *memoryFile;
};

#endif // MEMORY_H
